﻿using System;
using System.Globalization;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class Forma_1 : System.Web.UI.Page
{
    private String SessionID;
    private Boolean FolioExists;
    private Int32 Folio;

    private void Page_Load(object sender, EventArgs e)
    {
        SessionValidation();
        becaCreditoPerc();

        // Se verifíca si existe un Folio actual para cargar los datos
        // que han sido previamente guardados
        DatabaseConnection dbCon = new DatabaseConnection();
        FolioExists = dbCon.FolioExistsForCurrentUser(ref Folio, SessionID);
        dbCon.CloseConnection();
        if (FolioExists && !Page.IsPostBack)
        {
            LoadFormWithPastData();
        }
        else if (!FolioExists)
        {
            Response.Redirect("~/Alumno/");
        }
    }


    // Ingresa los valores al Dropdown de la %Beca y %Crédito
    private void becaCreditoPerc()
    {
        for (int i = 0; i <= 100; i += 5)
        {
            Datos_PorcentajeBeca.Items.Add(new ListItem("" + i + "", "" + i));
            Datos_PorcentajeCredito.Items.Add(new ListItem("" + i + "", "" + i));
        }
    }


    // Obtiene los valores que han sido previamente guardados en la Solicitud actual
    private void LoadFormWithPastData()
    {
        DatabaseConnection dbCon = new DatabaseConnection();
        String query = "SELECT * FROM Solicitud WHERE Solicitud.Folio = " + Folio +
                       " ORDER BY Solicitud.Folio DESC";
        SqlDataReader formData = dbCon.ExecuteSelect(query);
        
        if (formData.Read())
        {
            String domicilioActual = formData["Datos_DomicilioActual"].ToString();
            Datos_DomicilioActual.Text = domicilioActual;
            String semestreProximo = formData["Datos_SemestreProximo"].ToString();
            Datos_SemestreProximo.SelectedValue = semestreProximo;
            String Datos_PromSemA1Data = formData["Datos_PromSemA1"].ToString();
            Datos_PromSemA1.Text = Datos_PromSemA1Data;
            String Datos_PromSemA2Data = formData["Datos_PromSemA2"].ToString();
            Datos_PromSemA2.Text = Datos_PromSemA2Data;
            String Datos_TelefonoData = formData["Datos_Telefono"].ToString();
            Datos_Telefono.Text = Datos_TelefonoData;
            String Datos_CelularData = formData["Datos_Celular"].ToString();
            Datos_Celular.Text = Datos_CelularData;

            String Datos_CorreoPersonalData = formData["Datos_CorreoPersonal"].ToString();
            Datos_CorreoPersonal.Text = Datos_CorreoPersonalData;
            String Alumno_CarreraData = formData["Alumno_Carrera"].ToString();
            Alumno_Carrera.Text = Alumno_CarreraData;

            String Datos_PorcentajeBecaDatos = formData["Datos_PorcentajeBeca"].ToString();
            Datos_PorcentajeBeca.SelectedValue = Datos_PorcentajeBecaDatos;
            String Datos_PorcentajeCreditoDatos = formData["Datos_PorcentajeCredito"].ToString();
            Datos_PorcentajeCredito.SelectedValue = Datos_PorcentajeCreditoDatos;

            String Datos_PromAcumuladoData = formData["Datos_PromAcumulado"].ToString();
            Datos_PromAcumulado.Text = Datos_PromAcumuladoData;

            String Datos_ForaneoData = formData["Datos_Foraneo"].ToString();
            if (Datos_ForaneoData.Equals("Sí"))
            {
                Datos_Foraneo.Items[0].Selected = true;
            }
            else if (Datos_ForaneoData.Equals("No"))
            {
                Datos_Foraneo.Items[1].Selected = true;
            }
        }
        dbCon.CloseConnection();
    }


    // Obtiene la información de qué periodo aplicará la beca
    private String GetDatosSemestreProximoValue()
    {
        return Datos_SemestreProximo.SelectedItem.Enabled ? Datos_SemestreProximo.SelectedItem.Text : String.Empty;
    }


    // Obtiene la información qué porcentaje de beca tiene
    private String GetDatosPorcentajeBeca()
    {
        return Datos_PorcentajeBeca.SelectedItem.Enabled ? Datos_PorcentajeBeca.SelectedItem.Text : String.Empty;
    }

    // Obtiene la información de qué periodo aplicará la beca
    private String GetDatosPorcentajeCredito()
    {
        return Datos_PorcentajeCredito.SelectedItem.Enabled ? Datos_PorcentajeCredito.SelectedItem.Text : String.Empty;
    }
    
    private String GetDatosForaneosValue()
    {
        return Datos_Foraneo.SelectedItem.Enabled ? Datos_Foraneo.SelectedItem.Text : String.Empty;
    }


    protected void InsertData(object sender, EventArgs e)
    {
        Validate();

        DatabaseConnection dbCon = new DatabaseConnection();
        String TimeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo);
        using (SqlCommand myCommandString = new SqlCommand())
        {
            if (FolioExists)
            {
                //Update query goes here
                myCommandString.CommandText =
                    "UPDATE Solicitud SET Datos_SemestreProximo = @GetDatosSemestreProximoValue, " +
                    "Datos_DomicilioActual = @Datos_DomicilioActual, Solicitud_Fecha = @Solicitud_Fecha, " +
                    "Datos_PromSemA1 = @Datos_PromSemA1, Datos_PromSemA2 = @Datos_PromSemA2, " +
                    "Datos_Telefono = @Datos_Telefono, Datos_Celular = @Datos_Celular, " +
                    "Datos_PorcentajeBeca = @Datos_PorcentajeBeca, Datos_PorcentajeCredito = @Datos_PorcentajeCredito, " +
                    "Datos_PromAcumulado = @Datos_PromAcumulado, Datos_Foraneo = @GetDatosForaneosValue, " +
                    "Datos_CorreoPersonal = @Datos_CorreoPersonal, Alumno_Carrera = @Alumno_Carrera " +
                    "WHERE Solicitud.Folio = @Folio";
                myCommandString.Parameters.Add(new SqlParameter("@GetDatosSemestreProximoValue",
                                                                GetDatosSemestreProximoValue()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_DomicilioActual", Datos_DomicilioActual.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Solicitud_Fecha", TimeStamp));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PromSemA1", Datos_PromSemA1.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PromSemA2", Datos_PromSemA2.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_Telefono", Datos_Telefono.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_Celular", Datos_Celular.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PorcentajeBeca",
                                                                GetDatosPorcentajeBeca()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PorcentajeCredito",
                                                                GetDatosPorcentajeCredito()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PromAcumulado", Datos_PromAcumulado.Text));
                myCommandString.Parameters.Add(new SqlParameter("@GetDatosForaneosValue", GetDatosForaneosValue()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_CorreoPersonal", Datos_CorreoPersonal.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Alumno_Carrera", Alumno_Carrera.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Folio", Folio));
            }
            else //No folio exists so INSERT query goes here
            {
                myCommandString.CommandText =
                    "INSERT INTO Solicitud (Datos_SemestreProximo, Datos_DomicilioActual, Solicitud_Fecha, Datos_PromSemA1, " +
                    "Datos_PromSemA2, Datos_Telefono, Datos_Celular, Datos_PorcentajeBeca, Datos_PorcentajeCredito, " +
                    "Datos_PromAcumulado, Datos_Foraneo, Datos_CorreoPersonal, Alumno_Carrera, Matricula) " +
                    "VALUES (@GetDatosSemestreProximoValue, @Datos_DomicilioActual, @Solicitud_Fecha, @Datos_PromSemA1, " +
                    "@Datos_PromSemA2, @Datos_Telefono, @Datos_Celular, @Datos_PorcentajeBeca, @Datos_PorcentajeCredito, " +
                    "@Datos_PromAcumulado, @GetDatosForaneosValue, @Datos_CorreoPersonal, @Alumno_Carrera, @SessionID)";
                myCommandString.Parameters.Add(new SqlParameter("@GetDatosSemestreProximoValue",
                                                                GetDatosSemestreProximoValue()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_DomicilioActual", Datos_DomicilioActual.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Solicitud_Fecha", TimeStamp));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PromSemA1", Datos_PromSemA1.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PromSemA2", Datos_PromSemA2.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_Telefono", Datos_Telefono.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_Celular", Datos_Celular.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PorcentajeBeca",
                                                                GetDatosPorcentajeBeca()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PorcentajeCredito",
                                                                GetDatosPorcentajeCredito()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_PromAcumulado", Datos_PromAcumulado.Text));
                myCommandString.Parameters.Add(new SqlParameter("@GetDatosForaneosValue", GetDatosForaneosValue()));
                myCommandString.Parameters.Add(new SqlParameter("@Datos_CorreoPersonal", Datos_CorreoPersonal.Text));
                myCommandString.Parameters.Add(new SqlParameter("@Alumno_Carrera", Alumno_Carrera.Text));
                myCommandString.Parameters.Add(new SqlParameter("@SessionID", SessionID));
            }
            int rowsAffected = dbCon.ParameterizedExecuteNonQuery(myCommandString);
        }

        dbCon.CloseConnection();

        Response.Redirect("~/Forma/Forma2.aspx");
    }


    // Valida que la sesión del usuario sea la correcta para mostrar
    // el contenido de esta página
    protected void SessionValidation()
    {
        SessionID = (String)Session["SessionID"];
        String UserType = (String)Session["UserType"];

        if (String.IsNullOrEmpty(SessionID) || String.IsNullOrEmpty(UserType))
        {
            Session.RemoveAll();
            Response.Redirect("~/Default.aspx");
        }
        else
        {
            if (!String.Equals(UserType, "Alumnos"))
            {
                Session.RemoveAll();
                Response.Redirect("~/Default.aspx");
            }
        }
    }
}
